package com.dragon.modules.yuegou.enums.order;

import com.fasterxml.jackson.annotation.JsonCreator;

import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 类型
 * 
 * @author pbuilder generated
 *
 */
public enum OrderType {

	/**
	 * 购物订单
	 */
	BUY(0, "购物订单"),
	/**
	 * 扫码支付
	 */
	SCAN_PAY(1, "扫码支付"),
	/**
	 * 停车支付
	 */
	PARK(2, "停车支付"),
	/**
	 * 商户停车券
	 */
	MERCHANT_COUPON_BUY(3, "商户停车券"),
	/**
	 * 购买悦卡
	 */
	CARD_BUY(4, "购买悦卡"),
	/**
	 * 充值悦币
	 */
	RECHARGE_COIN(5, "充值悦币"),
	/**
	 * 仪表充值
	 */
	DOORNO_RECHARGE(6, "仪表充值"),
	/**
	 * 商户仪表充值
	 */
	MERCHANT_DOORNO_RECHARGE(7, "商户仪表充值"),
	/**
	 * 商户会员等级充值
	 */
	MERCHANT_LEVEL_BUY(8, "商户会员等级充值"),
	/**
	 * 疯狂砍价
	 */
	BARGAIN(9, "疯狂砍价"),
	/**
	 * 秒杀
	 */
	SECKILL(10, "秒杀"),
	/**
	 * 限时折扣
	 */
	LIMIT_SALES(11, "限时折扣"),
	/**
	 * 积分兑换
	 */
	POINTS(12, "积分兑换"),
	/**
	 * 购买套餐
	 */
	MEAL(13, "购买套餐"),
	/**
	 * 全民拼团
	 */
	GROUPON(14, "全民拼团"),
	/**
	 * 抽奖
	 */
	LOTTERY(15, "抽奖"),
	/**
	 * 物业缴费
	 */
	PROPERTY_PAY_COST(16, "物业缴费"),
	/**
	 * 商户物业缴费
	 */
	MERCHANT_PROPERTY_PAY_COST(17, "商户物业缴费"),
	/**
	 * 配送到家
	 */
	DELIVERY_TO_HOME(18, "配送到家"),
	/**
	 * 发放礼包(不能被查询到)
	 */
	GIVING_GIFT_BAG(19, "发放礼包(不能被查询到)"),
	/**
	 * 实体卡支付
	 */
	ENTITY_CARD_PAY(20, "实体卡支付"),
	/**
	 * 商品券领取
	 */
	COUPON(21, "商品券领取"),
	/**
	 * 京东商城订单
	 */
	JD(22, "京东商城订单"),
	/**
	 * 免费领取
	 */
	FREE(23, "免费领取"),
	/**
	 * 活动订单
	 */
	ACTIVITY(24, "活动订单");

	/**
	 * 枚举标识
	 */
	private final Integer code;

	/**
	 * 别名
	 */
	private final String alias;

	private OrderType(Integer code, String alias) {
		this.code = code;
		this.alias = alias;
	}
	
	public Integer getValue() {
		return code;
	}

	/**
	 * 枚举标识
	 * 
	 * @return code
	 */
	public Integer getCode() {
		return code;
	}

	/**
	 * 别名
	 * 
	 * @return alias
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * 把code转化为费用类型枚举
	 * 
	 * @param code 代码
	 * @return
	 */
	@JsonCreator
	public static OrderType from(Integer code) {
		if (code == null) {
			return null;
		}
		return CODE_MAP.get(code);
	}

	/**
	 * Code Map for OrderType
	 */
	private static final Map<Integer, OrderType> CODE_MAP = Stream.of(OrderType.values())
			.collect(Collectors.toMap(OrderType::getCode, e -> e));

}
